<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>popot-2.01: /opt/GoogleCode/popot/trunk/popot-2.01/src/algorithm.h Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />

<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">popot-2.01
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">/opt/GoogleCode/popot/trunk/popot-2.01/src/algorithm.h</div>  </div>
</div>
<div class="contents">
<a href="algorithm_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef POPOT_ALGORITHM_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define POPOT_ALGORITHM_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;cstdio&gt;</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cstdlib&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;iomanip&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;map&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;algorithm&gt;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="preprocessor">#include &quot;<a class="code" href="neighborhood_8h.html">neighborhood.h</a>&quot;</span>
<a name="l00013"></a>00013 <span class="preprocessor">#include &quot;<a class="code" href="individuals_8h.html">individuals.h</a>&quot;</span>
<a name="l00014"></a>00014 <span class="preprocessor">#include &quot;<a class="code" href="topology_8h.html">topology.h</a>&quot;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &quot;<a class="code" href="confinements_8h.html">confinements.h</a>&quot;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 
<a name="l00019"></a>00019 <span class="comment">// TODO</span>
<a name="l00020"></a>00020 <span class="comment">// - Rendre encore plus générique les manipulations de vectors : tout vectoriel!</span>
<a name="l00021"></a>00021 <span class="comment">//   et utiliser des itérateurs plutôt que [i]</span>
<a name="l00022"></a>00022 <span class="comment">// - ajouter les options -ansi -pedantic : catastrophe, ça pète sur les auto ... en tout cas sur fc16</span>
<a name="l00023"></a>00023 
<a name="l00024"></a><a class="code" href="namespacepopot.html">00024</a> <span class="keyword">namespace </span>popot
<a name="l00025"></a>00025 {
<a name="l00026"></a><a class="code" href="namespacepopot_1_1PSO.html">00026</a>   <span class="keyword">namespace </span>PSO
<a name="l00027"></a>00027   {
<a name="l00028"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html">00028</a>     <span class="keyword">namespace </span>algorithm
<a name="l00029"></a>00029     {
<a name="l00030"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953">00030</a>       <span class="keyword">typedef</span> <span class="keyword">enum</span>
<a name="l00031"></a>00031         {
<a name="l00032"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a67a81521f1b22188ac9273610f6cfdad">00032</a>           <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a67a81521f1b22188ac9273610f6cfdad">SYNCHRONOUS_EVALUATION</a>,
<a name="l00033"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a7af951ab1a5d7cb85ee4fd1176e872e0">00033</a>           <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a7af951ab1a5d7cb85ee4fd1176e872e0">ASYNCHRONOUS_EVALUATION</a>,
<a name="l00034"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">00034</a>           <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>
<a name="l00035"></a>00035         } <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953">EvaluationMode</a>;
<a name="l00036"></a>00036 
<a name="l00044"></a>00044       <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, 
<a name="l00045"></a>00045                 <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION, 
<a name="l00046"></a>00046                 <span class="keyword">typename</span> TOPOLOGY, <span class="keyword">typename</span> UPDATE_POSITION_RULE, 
<a name="l00047"></a>00047                 <span class="keyword">typename</span> UPDATE_VELOCITY_RULE, <span class="keyword">typename</span> UPDATE_BEST_POSITION_RULE, 
<a name="l00048"></a>00048                 <span class="keyword">typename</span> CONFINE_FUNCTION, <span class="keyword">typename</span> INIT_POSITION_FUNCTION, 
<a name="l00049"></a>00049                 <span class="keyword">typename</span> INIT_VELOCITY_FUNCTION, <span class="keyword">typename</span> PARTICLE&gt;
<a name="l00050"></a>00050       <span class="keyword">class </span>Base
<a name="l00051"></a>00051       {
<a name="l00052"></a>00052       <span class="keyword">public</span>:
<a name="l00053"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a5978e3e9cb0950005553f918b74fca1e">00053</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> PARTICLE<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a5978e3e9cb0950005553f918b74fca1e">::BestType</a> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a5978e3e9cb0950005553f918b74fca1e">BestType</a>;
<a name="l00054"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a57c8a169aa186e360c3cfa4b17256c5a">00054</a>         <span class="keyword">typedef</span> PARTICLE  <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a57c8a169aa186e360c3cfa4b17256c5a">ParticleType</a>;
<a name="l00055"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8cec67cf20336c23376781d978512ee0">00055</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> PARTICLE<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8cec67cf20336c23376781d978512ee0">::NeighborhoodType</a> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8cec67cf20336c23376781d978512ee0">NeighborhoodType</a>;
<a name="l00056"></a>00056 
<a name="l00057"></a>00057       <span class="keyword">private</span>:
<a name="l00058"></a>00058         std::vector&lt;PARTICLE&gt; particles;
<a name="l00059"></a>00059         std::vector&lt;NeighborhoodType * &gt; neighborhoods;
<a name="l00060"></a>00060         std::map&lt; size_t , std::vector&lt;size_t&gt; &gt; neighborhood_membership;
<a name="l00061"></a>00061 
<a name="l00062"></a>00062         <span class="keywordtype">size_t</span> *particles_indexes;
<a name="l00063"></a>00063 
<a name="l00064"></a>00064         <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a5978e3e9cb0950005553f918b74fca1e">BestType</a> _best_particle;
<a name="l00065"></a>00065 
<a name="l00066"></a>00066         <span class="keywordtype">size_t</span> _dimension;
<a name="l00067"></a>00067         <span class="keywordtype">size_t</span> _swarm_size;
<a name="l00068"></a>00068 
<a name="l00069"></a>00069         <span class="keyword">const</span> LBOUND_FUNC&amp; _lbound;
<a name="l00070"></a>00070         <span class="keyword">const</span> UBOUND_FUNC&amp; _ubound;
<a name="l00071"></a>00071         <span class="keyword">const</span> STOP_CRITERIA&amp; _stop_criteria;
<a name="l00072"></a>00072         <span class="keyword">const</span> COST_FUNCTION&amp; _cost_function;
<a name="l00073"></a>00073         <span class="keyword">const</span> TOPOLOGY _topology;
<a name="l00074"></a>00074         <span class="keyword">const</span> UPDATE_POSITION_RULE _update_position_rule;
<a name="l00075"></a>00075         <span class="keyword">const</span> UPDATE_VELOCITY_RULE _update_velocity_rule;
<a name="l00076"></a>00076         <span class="keyword">const</span> UPDATE_BEST_POSITION_RULE _update_best_position_rule;
<a name="l00077"></a>00077 
<a name="l00078"></a>00078         <span class="keyword">const</span> CONFINE_FUNCTION _confine_function;
<a name="l00079"></a>00079         <span class="keyword">const</span> INIT_POSITION_FUNCTION _init_position_function;
<a name="l00080"></a>00080         <span class="keyword">const</span> INIT_VELOCITY_FUNCTION _init_velocity_function;
<a name="l00081"></a>00081 
<a name="l00082"></a>00082         <span class="keyword">const</span> <span class="keywordtype">bool</span> _reevaluate_best_before_updating;
<a name="l00083"></a>00083 
<a name="l00084"></a>00084         <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953">EvaluationMode</a> _evaluation_mode;
<a name="l00085"></a>00085       <span class="keyword">public</span>:
<a name="l00086"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">00086</a>         <span class="keywordtype">int</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a>;
<a name="l00087"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a11b0e3151a628da364012bcf546ca560">00087</a>         <span class="keywordtype">int</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a11b0e3151a628da364012bcf546ca560">nb_new_neigh</a>;
<a name="l00088"></a>00088 
<a name="l00089"></a>00089       <span class="keyword">public</span>:
<a name="l00090"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a65b024eeac9172444517a5047a720e7a">00090</a>         <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a65b024eeac9172444517a5047a720e7a">Base</a>(<span class="keywordtype">size_t</span> swarm_size,
<a name="l00091"></a>00091              <span class="keywordtype">size_t</span> dimension,
<a name="l00092"></a>00092              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound,
<a name="l00093"></a>00093              <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00094"></a>00094              <span class="keyword">const</span> STOP_CRITERIA&amp; stop,
<a name="l00095"></a>00095              <span class="keyword">const</span> COST_FUNCTION&amp; cost_function,    
<a name="l00096"></a>00096              <span class="keyword">const</span> TOPOLOGY topology,
<a name="l00097"></a>00097              <span class="keyword">const</span> UPDATE_POSITION_RULE update_position_rule,
<a name="l00098"></a>00098              <span class="keyword">const</span> UPDATE_VELOCITY_RULE update_velocity_rule,
<a name="l00099"></a>00099              <span class="keyword">const</span> UPDATE_BEST_POSITION_RULE update_best_position_rule,
<a name="l00100"></a>00100              <span class="keyword">const</span> CONFINE_FUNCTION confine_function,
<a name="l00101"></a>00101              <span class="keyword">const</span> INIT_POSITION_FUNCTION init_position_function,
<a name="l00102"></a>00102              <span class="keyword">const</span> INIT_VELOCITY_FUNCTION init_velocity_function,
<a name="l00103"></a>00103              <span class="keyword">const</span> PARTICLE&amp; p,
<a name="l00104"></a>00104              <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953">EvaluationMode</a> evaluation_mode,
<a name="l00105"></a>00105              <span class="keywordtype">bool</span> reevaluate_best_before_updating) 
<a name="l00106"></a>00106         : _best_particle(dimension),
<a name="l00107"></a>00107           _dimension(dimension),
<a name="l00108"></a>00108           _swarm_size(swarm_size),
<a name="l00109"></a>00109           _lbound(lbound),
<a name="l00110"></a>00110           _ubound(ubound),
<a name="l00111"></a>00111           _stop_criteria(stop),
<a name="l00112"></a>00112           _cost_function(cost_function),
<a name="l00113"></a>00113           _topology(topology),
<a name="l00114"></a>00114           _update_position_rule(update_position_rule),
<a name="l00115"></a>00115           _update_velocity_rule(update_velocity_rule),
<a name="l00116"></a>00116           _update_best_position_rule(update_best_position_rule),
<a name="l00117"></a>00117           _confine_function(confine_function),
<a name="l00118"></a>00118           _init_position_function(init_position_function),
<a name="l00119"></a>00119           _init_velocity_function(init_velocity_function),
<a name="l00120"></a>00120           _reevaluate_best_before_updating(reevaluate_best_before_updating),
<a name="l00121"></a>00121           _evaluation_mode(evaluation_mode),
<a name="l00122"></a>00122           <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a>(0),
<a name="l00123"></a>00123           <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a11b0e3151a628da364012bcf546ca560">nb_new_neigh</a>(0)
<a name="l00124"></a>00124         {
<a name="l00125"></a>00125           <span class="comment">//</span>
<a name="l00126"></a>00126           particles_indexes = <span class="keyword">new</span> <span class="keywordtype">size_t</span>[swarm_size];
<a name="l00127"></a>00127 
<a name="l00128"></a>00128           <span class="comment">// Declare our particles</span>
<a name="l00129"></a>00129           particles.clear();
<a name="l00130"></a>00130           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; swarm_size ; ++i)
<a name="l00131"></a>00131             {
<a name="l00132"></a>00132               <span class="comment">// Create the particle</span>
<a name="l00133"></a>00133               particles.push_back(PARTICLE(_dimension));
<a name="l00134"></a>00134 
<a name="l00135"></a>00135               <span class="comment">// Initialize the position, best position and velocity</span>
<a name="l00136"></a>00136               _init_position_function(particles[i].getPosition(), _lbound, _ubound);
<a name="l00137"></a>00137               _init_velocity_function(particles[i].getPosition(), particles[i].getVelocity(), _lbound, _ubound);
<a name="l00138"></a>00138                                        
<a name="l00139"></a>00139               <span class="comment">// Evaluate the initial fitnesses</span>
<a name="l00140"></a>00140               particles[i].evaluateFitness(_cost_function);
<a name="l00141"></a>00141                 
<a name="l00142"></a>00142               <span class="comment">// And initialize the best position</span>
<a name="l00143"></a>00143               particles[i].initBestPosition();
<a name="l00144"></a>00144 
<a name="l00145"></a>00145               <span class="comment">// Set up the array of indices, used to random shuffle </span>
<a name="l00146"></a>00146               particles_indexes[i] = i;
<a name="l00147"></a>00147             }
<a name="l00148"></a>00148             
<a name="l00149"></a>00149           <span class="comment">// We now form groups of particles depending on the topology</span>
<a name="l00150"></a>00150           _topology(particles, neighborhoods, neighborhood_membership);
<a name="l00151"></a>00151           <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a11b0e3151a628da364012bcf546ca560">nb_new_neigh</a> ++;
<a name="l00152"></a>00152 
<a name="l00153"></a>00153           <span class="comment">// We now browse all the neighborhoods and find the best particles</span>
<a name="l00154"></a>00154           <span class="comment">// within each of them</span>
<a name="l00155"></a>00155           <span class="comment">// and initialize the best best particle of the whole swarm</span>
<a name="l00156"></a>00156           _best_particle = *(neighborhoods[0]-&gt;findBest());
<a name="l00157"></a>00157           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 1 ; i &lt; neighborhoods.size() ; ++i)
<a name="l00158"></a>00158             <span class="keywordflow">if</span>(neighborhoods[i]-&gt;findBest()-&gt;compare(_best_particle) &lt; 0)
<a name="l00159"></a>00159               _best_particle = *(neighborhoods[i]-&gt;<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">getBest</a>());
<a name="l00160"></a>00160         }
<a name="l00161"></a>00161 
<a name="l00162"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a16c72608dde4c6b73e217aed5764107a">00162</a>         <span class="keyword">virtual</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a16c72608dde4c6b73e217aed5764107a">~Base</a>(<span class="keywordtype">void</span>)
<a name="l00163"></a>00163         {
<a name="l00164"></a>00164           <span class="keyword">delete</span>[] particles_indexes;
<a name="l00165"></a>00165         }
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 
<a name="l00171"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a3febcc9ffbd2a08c347daabdfd2b5376">00171</a>         <span class="keywordtype">size_t</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a3febcc9ffbd2a08c347daabdfd2b5376">getSize</a>(<span class="keywordtype">void</span>)
<a name="l00172"></a>00172         {
<a name="l00173"></a>00173           <span class="keywordflow">return</span> _swarm_size;
<a name="l00174"></a>00174         }
<a name="l00175"></a>00175 
<a name="l00179"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a24406f51e52d2998ac7e72e2ea20a66f">00179</a>         <span class="keywordtype">double</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a24406f51e52d2998ac7e72e2ea20a66f">step</a>(<span class="keywordtype">void</span>)
<a name="l00180"></a>00180         {
<a name="l00181"></a>00181           <span class="comment">// For each particle,</span>
<a name="l00182"></a>00182           <span class="comment">// - Update the particle&#39;s velocity</span>
<a name="l00183"></a>00183           <span class="comment">// - Enforce velocity boundaries</span>
<a name="l00184"></a>00184           <span class="comment">// - Move the particle to its new position</span>
<a name="l00185"></a>00185           <span class="comment">// - Enforce position boundaries </span>
<a name="l00186"></a>00186           <span class="comment">// - Update the particle&#39;s best position</span>
<a name="l00187"></a>00187           <span class="comment">// - Update the swarm&#39;s best position</span>
<a name="l00188"></a>00188 
<a name="l00189"></a>00189           <span class="comment">// if(VERBOSE_BENCH)</span>
<a name="l00190"></a>00190           <span class="comment">//   std::cout &lt;&lt; &quot;Random before looping : &quot; &lt;&lt; RNG_GENERATOR::nb_calls &lt;&lt; &quot; calls &quot; &lt;&lt; std::endl;</span>
<a name="l00191"></a>00191 
<a name="l00192"></a>00192           <span class="comment">// If we use an asynchronous update, we first shuffle the particles</span>
<a name="l00193"></a>00193           <span class="keywordflow">if</span>(_evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a7af951ab1a5d7cb85ee4fd1176e872e0">ASYNCHRONOUS_EVALUATION</a> || _evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>)
<a name="l00194"></a>00194             {
<a name="l00195"></a>00195               <span class="comment">// If comparing to SPSO, the following should be commented</span>
<a name="l00196"></a>00196               <span class="keywordflow">if</span>(_evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a7af951ab1a5d7cb85ee4fd1176e872e0">ASYNCHRONOUS_EVALUATION</a>)
<a name="l00197"></a>00197                 <a class="code" href="namespacepopot_1_1math.html#a4b05877ed8e34acd5435021422a4d2a6">popot::math::random_shuffle_indexes</a>(particles_indexes, _swarm_size);
<a name="l00198"></a>00198 
<a name="l00199"></a>00199               <span class="keywordtype">size_t</span> particle_index;
<a name="l00200"></a>00200               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _swarm_size ; ++i)
<a name="l00201"></a>00201                 {
<a name="l00202"></a>00202                   particle_index = particles_indexes[i];
<a name="l00203"></a>00203 
<a name="l00204"></a>00204                   <span class="comment">// First find the best informant within the neighborhood</span>
<a name="l00205"></a>00205                   particles[particle_index].getNeighborhood().findBest();
<a name="l00206"></a>00206 
<a name="l00207"></a>00207                   <span class="comment">// Update the velocities and position</span>
<a name="l00208"></a>00208                   _update_velocity_rule(particles[particle_index]);
<a name="l00209"></a>00209                   _update_position_rule(particles[particle_index]);
<a name="l00210"></a>00210 
<a name="l00211"></a>00211                   <span class="comment">// Confine the positions and velocities if required</span>
<a name="l00212"></a>00212                   _confine_function(particles[particle_index].getPosition(), particles[particle_index].getVelocity(), _lbound, _ubound);
<a name="l00213"></a>00213 
<a name="l00214"></a>00214                   <span class="comment">// Compute the fitness of the new position</span>
<a name="l00215"></a>00215                   particles[particle_index].evaluateFitness(_cost_function);
<a name="l00216"></a>00216 
<a name="l00217"></a>00217                   <span class="comment">// And see if we update the personal best</span>
<a name="l00218"></a>00218                   <span class="keywordflow">if</span>(_reevaluate_best_before_updating)
<a name="l00219"></a>00219                     particles[i].getBestPosition().evaluateFitness(_cost_function);
<a name="l00220"></a>00220 
<a name="l00221"></a>00221                   _update_best_position_rule(particles[particle_index]);
<a name="l00222"></a>00222 
<a name="l00223"></a>00223                   <span class="comment">//if(VERBOSE_BENCH)</span>
<a name="l00224"></a>00224                   <span class="comment">//  std::cout &lt;&lt; std::endl;</span>
<a name="l00225"></a>00225 
<a name="l00226"></a>00226                 }
<a name="l00227"></a>00227             }
<a name="l00228"></a>00228           <span class="keywordflow">else</span> <span class="comment">// Synchronous evaluation</span>
<a name="l00229"></a>00229             {
<a name="l00230"></a>00230               <span class="comment">// In synchronous mode</span>
<a name="l00231"></a>00231               <span class="comment">// we first update all the current positions and evaluate their fitness</span>
<a name="l00232"></a>00232               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _swarm_size ; ++i)
<a name="l00233"></a>00233                 {
<a name="l00234"></a>00234                   <span class="comment">// Update the velocities and position</span>
<a name="l00235"></a>00235                   _update_velocity_rule(particles[i]);
<a name="l00236"></a>00236                   _update_position_rule(particles[i]);
<a name="l00237"></a>00237 
<a name="l00238"></a>00238                   <span class="comment">// Confine the positions and velocities if required</span>
<a name="l00239"></a>00239                   _confine_function(particles[i].getPosition(), particles[i].getVelocity(), _lbound, _ubound);
<a name="l00240"></a>00240                   <span class="comment">// Compute the fitness of the new position</span>
<a name="l00241"></a>00241                   particles[i].evaluateFitness(_cost_function);
<a name="l00242"></a>00242                 }
<a name="l00243"></a>00243               <span class="comment">// before changing the personal bests</span>
<a name="l00244"></a>00244 
<a name="l00245"></a>00245 
<a name="l00246"></a>00246               <span class="comment">// The personal best position is updated after all the positions of the particles</span>
<a name="l00247"></a>00247               <span class="comment">// have been updated because the neighborhoods hold a pointer to a personal best</span>
<a name="l00248"></a>00248               <span class="comment">// As this best in the neighborhood is used by the particles when they</span>
<a name="l00249"></a>00249               <span class="comment">// update their velocity, we must ensure that, for a synchronous evaluation</span>
<a name="l00250"></a>00250               <span class="comment">// updating the best is done after all the positions updates</span>
<a name="l00251"></a>00251               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _swarm_size ; ++i)
<a name="l00252"></a>00252                 {
<a name="l00253"></a>00253                   <span class="keywordflow">if</span>(_reevaluate_best_before_updating)
<a name="l00254"></a>00254                     particles[i].getBestPosition().evaluateFitness(_cost_function);
<a name="l00255"></a>00255                   _update_best_position_rule(particles[i]);
<a name="l00256"></a>00256                 }
<a name="l00257"></a>00257 
<a name="l00258"></a>00258               <span class="comment">// We now update the best particle of all the neighborhoods</span>
<a name="l00259"></a>00259               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; neighborhoods.size() ; ++i)
<a name="l00260"></a>00260                 neighborhoods[i]-&gt;findBest();
<a name="l00261"></a>00261             }
<a name="l00262"></a>00262 
<a name="l00263"></a>00263           <span class="comment">// Update the best particle the whole swarm ever had</span>
<a name="l00264"></a>00264           <span class="keywordtype">double</span> old_fitness = _best_particle.getFitness();
<a name="l00265"></a>00265 
<a name="l00266"></a>00266           _best_particle = *(neighborhoods[0]-&gt;findBest());
<a name="l00267"></a>00267           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 1 ; i &lt; neighborhoods.size() ; ++i)
<a name="l00268"></a>00268             <span class="keywordflow">if</span>(neighborhoods[i]-&gt;findBest()-&gt;compare(_best_particle) &lt; 0)
<a name="l00269"></a>00269               _best_particle = *(neighborhoods[i]-&gt;<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">getBest</a>());
<a name="l00270"></a>00270 
<a name="l00271"></a>00271           <span class="keywordflow">if</span>(_best_particle.getFitness() &gt;= old_fitness)
<a name="l00272"></a>00272             {
<a name="l00273"></a>00273               <span class="comment">// We consider that there is no improvement in the best particle</span>
<a name="l00274"></a>00274               <span class="comment">// and ask the topology if it wants to regenerate its topology</span>
<a name="l00275"></a>00275               _topology(particles, neighborhoods, neighborhood_membership);
<a name="l00276"></a>00276               <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a11b0e3151a628da364012bcf546ca560">nb_new_neigh</a> ++;
<a name="l00277"></a>00277             }
<a name="l00278"></a>00278           
<a name="l00279"></a>00279           <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a>++;
<a name="l00280"></a>00280           <span class="keywordflow">return</span> _best_particle.getFitness() - old_fitness;
<a name="l00281"></a>00281         }
<a name="l00282"></a>00282 
<a name="l00286"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aca006aec778bf415b039c1bdf82348d7">00286</a>         <span class="keywordtype">size_t</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aca006aec778bf415b039c1bdf82348d7">getEpoch</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
<a name="l00287"></a>00287 <span class="keyword">        </span>{
<a name="l00288"></a>00288           <span class="keywordflow">return</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a>;
<a name="l00289"></a>00289         }
<a name="l00290"></a>00290 
<a name="l00295"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a2a5b67424882791f4e3b796af18744df">00295</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a2a5b67424882791f4e3b796af18744df">run</a>(<span class="keywordtype">int</span> verbose=0)
<a name="l00296"></a>00296         {
<a name="l00297"></a>00297           <span class="keywordflow">while</span>(!_stop_criteria(<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">getBest</a>().getFitness(), <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a>))
<a name="l00298"></a>00298             {
<a name="l00299"></a>00299               <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a24406f51e52d2998ac7e72e2ea20a66f">step</a>();
<a name="l00300"></a>00300               <span class="keywordflow">if</span>(verbose) std::cout &lt;&lt; <span class="charliteral">&#39;\r&#39;</span> &lt;&lt; std::setw(6) &lt;&lt; std::setfill(<span class="charliteral">&#39;0&#39;</span>) &lt;&lt; <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aff83ae446028e1d606a380820b7d5905">epoch</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">getBest</a>().getFitness() &lt;&lt; std::setw(5) &lt;&lt; std::setfill(<span class="charliteral">&#39; &#39;</span>) &lt;&lt; <span class="charliteral">&#39; &#39;</span> &lt;&lt; std::flush;
<a name="l00301"></a>00301             }
<a name="l00302"></a>00302           <span class="keywordflow">if</span>(verbose) std::cout &lt;&lt; std::endl;
<a name="l00303"></a>00303         }
<a name="l00304"></a>00304 
<a name="l00308"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">00308</a>         <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a5978e3e9cb0950005553f918b74fca1e">BestType</a>&amp; <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a8c06869ad52898ed1e642e885a7f5bee">getBest</a>(<span class="keywordtype">void</span>)
<a name="l00309"></a>00309         {
<a name="l00310"></a>00310           <span class="keywordflow">return</span> _best_particle;
<a name="l00311"></a>00311         }
<a name="l00312"></a>00312 
<a name="l00316"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#abc3b2f3552404e3720c42090293b5b16">00316</a>         <span class="keywordtype">double</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#abc3b2f3552404e3720c42090293b5b16">getBestFitness</a>()<span class="keyword"> const</span>
<a name="l00317"></a>00317 <span class="keyword">        </span>{
<a name="l00318"></a>00318           <span class="keywordflow">return</span> _best_particle.getFitness();
<a name="l00319"></a>00319         }
<a name="l00320"></a>00320 
<a name="l00324"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a959897e520c4ce594bdd852a722d0c98">00324</a>         std::vector&lt;PARTICLE&gt;&amp; <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a959897e520c4ce594bdd852a722d0c98">getParticles</a>(<span class="keywordtype">void</span>)
<a name="l00325"></a>00325         {
<a name="l00326"></a>00326           <span class="keywordflow">return</span> particles;
<a name="l00327"></a>00327         }
<a name="l00328"></a>00328 
<a name="l00333"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#ad800bca76087c5061a127366208a82e6">00333</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#ad800bca76087c5061a127366208a82e6">print</a>(<span class="keywordtype">int</span> mode=0)
<a name="l00334"></a>00334         {
<a name="l00335"></a>00335           <span class="keywordflow">if</span>(_evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a67a81521f1b22188ac9273610f6cfdad">SYNCHRONOUS_EVALUATION</a>)
<a name="l00336"></a>00336             printf(<span class="stringliteral">&quot;Using a synchronous evaluation mode \n&quot;</span>);
<a name="l00337"></a>00337           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(_evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953a7af951ab1a5d7cb85ee4fd1176e872e0">ASYNCHRONOUS_EVALUATION</a>)
<a name="l00338"></a>00338             printf(<span class="stringliteral">&quot;Using an asynchronous evaluation mode \n&quot;</span>);
<a name="l00339"></a>00339           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(_evaluation_mode == <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>)
<a name="l00340"></a>00340             printf(<span class="stringliteral">&quot;Using an asynchronous evaluation mode with random shuffling the particles\n&quot;</span>);
<a name="l00341"></a>00341           <span class="keywordflow">else</span>
<a name="l00342"></a>00342             printf(<span class="stringliteral">&quot;WARNING : Unrecognized evaluation mode \n&quot;</span>);
<a name="l00343"></a>00343 
<a name="l00344"></a>00344           <span class="keywordflow">switch</span>(mode)
<a name="l00345"></a>00345             {
<a name="l00346"></a>00346             <span class="keywordflow">case</span> 0:
<a name="l00347"></a>00347               {
<a name="l00348"></a>00348                 <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _swarm_size ; ++i)
<a name="l00349"></a>00349                   {
<a name="l00350"></a>00350                     std::cout &lt;&lt; <span class="stringliteral">&quot;Particle &quot;</span> &lt;&lt; std::setw(3) &lt;&lt; std::setfill(<span class="charliteral">&#39; &#39;</span>) &lt;&lt; i
<a name="l00351"></a>00351                               &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span> &lt;&lt; particles[i] &lt;&lt; std::endl;
<a name="l00352"></a>00352                   }
<a name="l00353"></a>00353                 <span class="comment">// Display the best particle</span>
<a name="l00354"></a>00354                 std::cout &lt;&lt; <span class="stringliteral">&quot;Best particle : \n&quot;</span> &lt;&lt; _best_particle &lt;&lt; std::endl;
<a name="l00355"></a>00355               }
<a name="l00356"></a>00356               <span class="keywordflow">break</span>;
<a name="l00357"></a>00357             <span class="keywordflow">case</span> 1:
<a name="l00358"></a>00358               {
<a name="l00359"></a>00359                 <span class="comment">// Display the best particle</span>
<a name="l00360"></a>00360                 std::cout &lt;&lt; <span class="stringliteral">&quot;Best particle : \n&quot;</span> &lt;&lt; _best_particle &lt;&lt; std::endl;
<a name="l00361"></a>00361               }
<a name="l00362"></a>00362               <span class="keywordflow">break</span>;
<a name="l00363"></a>00363             <span class="keywordflow">case</span> 2:
<a name="l00364"></a>00364               {
<a name="l00365"></a>00365                 <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _swarm_size ; ++i)
<a name="l00366"></a>00366                   {
<a name="l00367"></a>00367                     std::cout &lt;&lt; <span class="stringliteral">&quot;Particle &quot;</span> &lt;&lt; std::setw(3) &lt;&lt; std::setfill(<span class="charliteral">&#39; &#39;</span>) &lt;&lt; i
<a name="l00368"></a>00368                               &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; particles[i].getFitness() &lt;&lt; <span class="stringliteral">&quot; ; Best : &quot;</span> &lt;&lt; particles[i].getBestPosition().getFitness() &lt;&lt; std::endl;
<a name="l00369"></a>00369                   }
<a name="l00370"></a>00370                 <span class="comment">// Display the best particle</span>
<a name="l00371"></a>00371                 std::cout &lt;&lt; <span class="stringliteral">&quot;Best particle : \n&quot;</span> &lt;&lt; _best_particle.getFitness() &lt;&lt; std::endl;
<a name="l00372"></a>00372               }
<a name="l00373"></a>00373               <span class="keywordflow">break</span>;
<a name="l00374"></a>00374             <span class="keywordflow">default</span>:
<a name="l00375"></a>00375               <span class="keywordflow">break</span>;
<a name="l00376"></a>00376             }
<a name="l00377"></a>00377         }
<a name="l00378"></a>00378 
<a name="l00379"></a>00379         
<a name="l00380"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aee12625839c296a56622409e0bd33174">00380</a>         std::map&lt; size_t , std::vector&lt;size_t&gt; &gt;&amp; <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#aee12625839c296a56622409e0bd33174">getNeighborhoodMembership</a>(<span class="keywordtype">void</span>)
<a name="l00381"></a>00381         {
<a name="l00382"></a>00382           <span class="keywordflow">return</span> neighborhood_membership;
<a name="l00383"></a>00383         }
<a name="l00384"></a>00384 
<a name="l00388"></a><a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a577345bb0be54f25327e64d9e4672a2f">00388</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html#a577345bb0be54f25327e64d9e4672a2f">generateGraph</a>(std::string filename)
<a name="l00389"></a>00389         {
<a name="l00390"></a>00390           printf(<span class="stringliteral">&quot;----------- \n Generating a graph of the connectivity \n&quot;</span>);
<a name="l00391"></a>00391           <span class="keywordtype">size_t</span> nb_particles = _swarm_size;
<a name="l00392"></a>00392 
<a name="l00393"></a>00393           <span class="comment">// From this connectivity matrix, we generate the file</span>
<a name="l00394"></a>00394           <span class="comment">// to be used with the DOT command</span>
<a name="l00395"></a>00395           std::ofstream outfile(filename.c_str());
<a name="l00396"></a>00396           outfile &lt;&lt; <span class="stringliteral">&quot;digraph Connections {&quot;</span> &lt;&lt; std::endl;
<a name="l00397"></a>00397           outfile &lt;&lt; <span class="stringliteral">&quot;node [shape=circle,fixedsize=true,width=0.6];  &quot;</span>;
<a name="l00398"></a>00398           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; nb_particles ; ++i)
<a name="l00399"></a>00399             {
<a name="l00400"></a>00400               outfile &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;;&quot;</span>;
<a name="l00401"></a>00401             }
<a name="l00402"></a>00402           outfile &lt;&lt; std::endl;
<a name="l00403"></a>00403 
<a name="l00404"></a>00404           <span class="comment">// Generate a connectivity matrix</span>
<a name="l00405"></a>00405           <span class="keywordtype">int</span> *connectivity_matrix = <span class="keyword">new</span> <span class="keywordtype">int</span>[nb_particles*nb_particles];
<a name="l00406"></a>00406           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; nb_particles*nb_particles ; ++i)
<a name="l00407"></a>00407             connectivity_matrix[i] = 0;
<a name="l00408"></a>00408 
<a name="l00409"></a>00409           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; nb_particles ; ++i)
<a name="l00410"></a>00410             <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> j = 0 ; j &lt; neighborhood_membership[i].size(); ++j)
<a name="l00411"></a>00411               connectivity_matrix[i*nb_particles+neighborhood_membership[i][j]] += 1;
<a name="l00412"></a>00412 
<a name="l00413"></a>00413           <span class="comment">// Put in the connections</span>
<a name="l00414"></a>00414           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; nb_particles ; ++i)
<a name="l00415"></a>00415             {
<a name="l00416"></a>00416               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> j = 0 ; j &lt; i ; ++j)
<a name="l00417"></a>00417                 {
<a name="l00418"></a>00418                   <span class="keywordflow">if</span>(connectivity_matrix[i*nb_particles+j] &amp;&amp; !connectivity_matrix[j*nb_particles+i])
<a name="l00419"></a>00419                     outfile &lt;&lt; j &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;;&quot;</span> &lt;&lt; std::endl;
<a name="l00420"></a>00420                   <span class="keywordflow">else</span> <span class="keywordflow">if</span>(connectivity_matrix[i*nb_particles+j] &amp;&amp; connectivity_matrix[j*nb_particles+i])
<a name="l00421"></a>00421                     outfile &lt;&lt; j &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot; [dir=both];&quot;</span> &lt;&lt; std::endl;
<a name="l00422"></a>00422                 }
<a name="l00423"></a>00423               <span class="keywordflow">if</span>(connectivity_matrix[i*nb_particles+i])
<a name="l00424"></a>00424                 outfile &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;;&quot;</span> &lt;&lt; std::endl;
<a name="l00425"></a>00425             }
<a name="l00426"></a>00426 
<a name="l00427"></a>00427           <span class="comment">// The title and the end of the graphic</span>
<a name="l00428"></a>00428           outfile &lt;&lt; <span class="stringliteral">&quot;overlap=false&quot;</span> &lt;&lt; std::endl;
<a name="l00429"></a>00429           outfile &lt;&lt; <span class="stringliteral">&quot;label=\&quot;Swarm&#39;s connections\&quot;&quot;</span> &lt;&lt; std::endl;
<a name="l00430"></a>00430           outfile &lt;&lt; <span class="stringliteral">&quot;fontsize=12;&quot;</span> &lt;&lt; std::endl;
<a name="l00431"></a>00431           outfile &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; std::endl;
<a name="l00432"></a>00432           outfile.close();
<a name="l00433"></a>00433 
<a name="l00434"></a>00434           printf(<span class="stringliteral">&quot;You can generate the graph by calling e.g.: \n&quot;</span>);
<a name="l00435"></a>00435           printf(<span class="stringliteral">&quot; neato -Tpng %s &gt; graph.png\n&quot;</span>, filename.c_str());
<a name="l00436"></a>00436           printf(<span class="stringliteral">&quot;Other export formats can be used with dot/neato : svg, eps, dia, xfig, ...\n&quot;</span>);
<a name="l00437"></a>00437 
<a name="l00438"></a>00438           <span class="comment">// Compute the distribution of the informants</span>
<a name="l00439"></a>00439           <span class="comment">// We first compute the number of informants for each particle</span>
<a name="l00440"></a>00440           <span class="comment">// The informants of particle i are at line i</span>
<a name="l00441"></a>00441           <span class="keywordtype">size_t</span> * nb_informants = <span class="keyword">new</span> <span class="keywordtype">size_t</span>[nb_particles];
<a name="l00442"></a>00442           <span class="keywordtype">size_t</span> max_nb_informants = 0;
<a name="l00443"></a>00443           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; nb_particles ; ++i)
<a name="l00444"></a>00444             {
<a name="l00445"></a>00445               nb_informants[i] = 0;
<a name="l00446"></a>00446               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> j = 0 ; j &lt; nb_particles ; ++j)
<a name="l00447"></a>00447                 nb_informants[i] += connectivity_matrix[i*nb_particles+j];
<a name="l00448"></a>00448               <span class="keywordflow">if</span>(nb_informants[i] &gt; max_nb_informants)
<a name="l00449"></a>00449                 max_nb_informants = nb_informants[i];
<a name="l00450"></a>00450             }
<a name="l00451"></a>00451           printf(<span class="stringliteral">&quot;\n&quot;</span>);
<a name="l00452"></a>00452           printf(<span class="stringliteral">&quot;Max number of informants : %i \n&quot;</span>, max_nb_informants);
<a name="l00453"></a>00453 
<a name="l00454"></a>00454           outfile.open((filename + <span class="stringliteral">&quot;.conn&quot;</span>).c_str());
<a name="l00455"></a>00455           <span class="keywordtype">size_t</span> nb_part = 0;
<a name="l00456"></a>00456           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt;= max_nb_informants ; ++i)
<a name="l00457"></a>00457             {
<a name="l00458"></a>00458               <span class="comment">// How many particles have nb_informants &lt;= i ?</span>
<a name="l00459"></a>00459               nb_part = 0;
<a name="l00460"></a>00460               <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> j = 0 ; j &lt; nb_particles ; ++j)
<a name="l00461"></a>00461                 <span class="keywordflow">if</span>(nb_informants[j] == i)
<a name="l00462"></a>00462                   nb_part ++;
<a name="l00463"></a>00463               outfile &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; nb_part/double(nb_particles) &lt;&lt; std::endl;
<a name="l00464"></a>00464             }
<a name="l00465"></a>00465           outfile.close();
<a name="l00466"></a>00466           printf(<span class="stringliteral">&quot;-------------\n&quot;</span>);
<a name="l00467"></a>00467 
<a name="l00468"></a>00468           <span class="keyword">delete</span>[] connectivity_matrix;
<a name="l00469"></a>00469           <span class="keyword">delete</span>[] nb_informants;
<a name="l00470"></a>00470         }
<a name="l00471"></a>00471       };
<a name="l00472"></a>00472 
<a name="l00473"></a>00473       <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC,
<a name="l00474"></a>00474                 <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION,
<a name="l00475"></a>00475                 <span class="keyword">typename</span> TOPOLOGY, <span class="keyword">typename</span> UPDATE_POSITION_RULE, 
<a name="l00476"></a>00476                 <span class="keyword">typename</span> UPDATE_VELOCITY_RULE,<span class="keyword">typename</span> UPDATE_BEST_POSITION_RULE, 
<a name="l00477"></a>00477                 <span class="keyword">typename</span> CONFINE_FUNCTION, <span class="keyword">typename</span> INIT_POSITION_FUNCTION,
<a name="l00478"></a>00478                 <span class="keyword">typename</span> INIT_VELOCITY_FUNCTION, <span class="keyword">typename</span> PARTICLE&gt;
<a name="l00479"></a>00479       Base&lt;LBOUND_FUNC, UBOUND_FUNC, 
<a name="l00480"></a>00480            STOP_CRITERIA, COST_FUNCTION, 
<a name="l00481"></a>00481            TOPOLOGY, UPDATE_POSITION_RULE, 
<a name="l00482"></a>00482            UPDATE_VELOCITY_RULE, UPDATE_BEST_POSITION_RULE, 
<a name="l00483"></a>00483            CONFINE_FUNCTION, INIT_POSITION_FUNCTION, 
<a name="l00484"></a>00484            INIT_VELOCITY_FUNCTION, PARTICLE&gt;
<a name="l00485"></a><a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a12c2af29b09b1b5beecafc31076ce47a">00485</a>       <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a12c2af29b09b1b5beecafc31076ce47a">base</a>(<span class="keywordtype">size_t</span> swarm_size,
<a name="l00486"></a>00486            <span class="keywordtype">size_t</span> dimension,
<a name="l00487"></a>00487            <span class="keyword">const</span> LBOUND_FUNC&amp; lbound,
<a name="l00488"></a>00488            <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00489"></a>00489            <span class="keyword">const</span> STOP_CRITERIA&amp; stop,
<a name="l00490"></a>00490            <span class="keyword">const</span> COST_FUNCTION&amp; cost_function,
<a name="l00491"></a>00491            <span class="keyword">const</span> TOPOLOGY&amp; topology,
<a name="l00492"></a>00492            <span class="keyword">const</span> UPDATE_POSITION_RULE&amp; update_position_rule,
<a name="l00493"></a>00493            <span class="keyword">const</span> UPDATE_VELOCITY_RULE&amp; update_velocity_rule,
<a name="l00494"></a>00494            <span class="keyword">const</span> UPDATE_BEST_POSITION_RULE&amp; update_best_position_rule,
<a name="l00495"></a>00495            <span class="keyword">const</span> CONFINE_FUNCTION&amp; confine_function,
<a name="l00496"></a>00496            <span class="keyword">const</span> INIT_POSITION_FUNCTION&amp; init_position_function,
<a name="l00497"></a>00497            <span class="keyword">const</span> INIT_VELOCITY_FUNCTION&amp; init_velocity_function,
<a name="l00498"></a>00498            <span class="keyword">const</span> PARTICLE&amp; p,
<a name="l00499"></a>00499            <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953">EvaluationMode</a> evaluation_mode,
<a name="l00500"></a>00500            <span class="keywordtype">bool</span> reevaluate_best_before_updating)
<a name="l00501"></a>00501       {
<a name="l00502"></a>00502         <span class="comment">// the parameters above can be provided by reference</span>
<a name="l00503"></a>00503         <span class="comment">// as we anyway copy (some of) them in the constructor</span>
<a name="l00504"></a>00504         
<a name="l00505"></a>00505         <span class="keywordflow">return</span> <a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">Base</a>&lt;LBOUND_FUNC, UBOUND_FUNC, STOP_CRITERIA, COST_FUNCTION, 
<a name="l00506"></a>00506                     TOPOLOGY, UPDATE_POSITION_RULE, UPDATE_VELOCITY_RULE, UPDATE_BEST_POSITION_RULE, CONFINE_FUNCTION, INIT_POSITION_FUNCTION, INIT_VELOCITY_FUNCTION, PARTICLE&gt;
<a name="l00507"></a>00507           (swarm_size, dimension, lbound, ubound, stop, cost_function, topology, 
<a name="l00508"></a>00508            update_position_rule, update_velocity_rule, update_best_position_rule, confine_function, init_position_function, init_velocity_function, p, evaluation_mode, reevaluate_best_before_updating);
<a name="l00509"></a>00509       }
<a name="l00510"></a>00510 
<a name="l00511"></a>00511 
<a name="l00512"></a>00512     } <span class="comment">// namespace algorithm</span>
<a name="l00513"></a>00513   } <span class="comment">// namespace PSO</span>
<a name="l00514"></a>00514 
<a name="l00515"></a><a class="code" href="namespacepopot_1_1ABC.html">00515</a>   <span class="keyword">namespace </span>ABC
<a name="l00516"></a>00516   {
<a name="l00517"></a><a class="code" href="namespacepopot_1_1ABC_1_1algorithm.html">00517</a>     <span class="keyword">namespace </span>algorithm
<a name="l00518"></a>00518     {
<a name="l00519"></a>00519       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00520"></a>00520       <span class="keyword">class </span><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html">Base</a>
<a name="l00521"></a>00521       {
<a name="l00522"></a>00522         <span class="keyword">typedef</span> popot<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html">::ABC::individuals::FoodSource</a> FoodSourceType;
<a name="l00523"></a>00523 
<a name="l00524"></a>00524       <span class="keyword">private</span>:
<a name="l00525"></a>00525         <span class="keywordtype">size_t</span> _epoch;
<a name="l00526"></a>00526         <span class="keywordtype">size_t</span> _CS;
<a name="l00527"></a>00527         <span class="keywordtype">size_t</span> _dimension;
<a name="l00528"></a>00528         <span class="keywordtype">size_t</span> _limitForScout;
<a name="l00529"></a>00529         <span class="keywordtype">size_t</span> _nb_employed;
<a name="l00530"></a>00530         <span class="keywordtype">size_t</span> _nb_onlookers;
<a name="l00531"></a>00531         <span class="keywordtype">double</span> * _probabilities;
<a name="l00532"></a>00532 
<a name="l00533"></a>00533         FoodSourceType * _foodSources;
<a name="l00534"></a>00534         FoodSourceType _bestSource;
<a name="l00535"></a>00535 
<a name="l00536"></a>00536         <span class="keyword">const</span> LBOUND_FUNC&amp; _lbound;
<a name="l00537"></a>00537         <span class="keyword">const</span> UBOUND_FUNC&amp; _ubound;
<a name="l00538"></a>00538         <span class="keyword">const</span> STOP_CRITERIA&amp; _stop_criteria;
<a name="l00539"></a>00539         <span class="keyword">const</span> COST_FUNCTION&amp; _cost_function;
<a name="l00540"></a>00540 
<a name="l00541"></a>00541         
<a name="l00542"></a>00542       <span class="keyword">private</span>:
<a name="l00543"></a>00543         <span class="keywordtype">void</span> findBestSource(<span class="keywordtype">void</span>)
<a name="l00544"></a>00544         {
<a name="l00545"></a>00545           <span class="keywordtype">double</span> bestf = _bestSource.<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#a57d40e8ec95c358fd49d18dd7952dd07">getFitness</a>();
<a name="l00546"></a>00546           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00547"></a>00547             <span class="keywordflow">if</span>(bestf &lt; _foodSources[i].getFitness())
<a name="l00548"></a>00548               {
<a name="l00549"></a>00549                 bestf = _foodSources[i].<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#a57d40e8ec95c358fd49d18dd7952dd07">getFitness</a>();
<a name="l00550"></a>00550                 _bestSource = _foodSources[i];
<a name="l00551"></a>00551               }
<a name="l00552"></a>00552         }
<a name="l00553"></a>00553 
<a name="l00554"></a>00554         <span class="keywordtype">void</span> employedPhase(<span class="keywordtype">void</span>)
<a name="l00555"></a>00555         {
<a name="l00556"></a>00556           <span class="comment">// In the employed bees phase, we generate new solutions</span>
<a name="l00557"></a>00557           <span class="comment">// around each nectar source</span>
<a name="l00558"></a>00558           <span class="comment">//int change_dim;</span>
<a name="l00559"></a>00559           <span class="keywordtype">size_t</span> other_source;
<a name="l00560"></a>00560           <span class="comment">//double phi;</span>
<a name="l00561"></a>00561           FoodSourceType new_source;
<a name="l00562"></a>00562           <span class="comment">//double new_param_value;</span>
<a name="l00563"></a>00563           <span class="keywordtype">double</span> sum_fitnesses = 0;
<a name="l00564"></a>00564           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00565"></a>00565             {
<a name="l00566"></a>00566               <span class="comment">// Randomly select another source, different from the current source</span>
<a name="l00567"></a>00567               other_source = (size_t) <a class="code" href="namespacepopot_1_1math.html#aff66c3835eec2f4653b273e25e8c841b">popot::math::uniform_random</a>(0, _nb_employed);
<a name="l00568"></a>00568               <span class="keywordflow">while</span>(other_source == i)
<a name="l00569"></a>00569                 other_source = (size_t) <a class="code" href="namespacepopot_1_1math.html#aff66c3835eec2f4653b273e25e8c841b">popot::math::uniform_random</a>(0, _nb_employed);
<a name="l00570"></a>00570 
<a name="l00571"></a>00571               _foodSources[i].<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#a6a3fe094b5d26a516d79ada8cd2ca840">combine</a>(_foodSources[other_source], _lbound, _ubound, _cost_function);
<a name="l00572"></a>00572 
<a name="l00573"></a>00573               _probabilities[i] = (_foodSources[i]).getFitness();
<a name="l00574"></a>00574               sum_fitnesses += _probabilities[i];
<a name="l00575"></a>00575             }
<a name="l00576"></a>00576 
<a name="l00577"></a>00577           <span class="comment">// At the end, we normalize the probabilities for each source</span>
<a name="l00578"></a>00578           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00579"></a>00579             _probabilities[i] /= sum_fitnesses;
<a name="l00580"></a>00580         }
<a name="l00581"></a>00581 
<a name="l00582"></a>00582         <span class="keywordtype">void</span> onlookerPhase(<span class="keywordtype">void</span>)
<a name="l00583"></a>00583         {
<a name="l00584"></a>00584           <span class="comment">// Onlooker phase</span>
<a name="l00585"></a>00585           <span class="comment">// Each onlooker bee selects a food source</span>
<a name="l00586"></a>00586           <span class="comment">// based on its probability (reflecting its relative fitness)</span>
<a name="l00587"></a>00587           <span class="keywordtype">size_t</span> selected_source=0;
<a name="l00588"></a>00588           <span class="keywordtype">size_t</span> other_source=0;
<a name="l00589"></a>00589           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_onlookers ; ++i)
<a name="l00590"></a>00590             {
<a name="l00591"></a>00591               <span class="comment">// Select a source based on its fitness</span>
<a name="l00592"></a>00592               selected_source = <a class="code" href="namespacepopot_1_1math.html#a66e3abf5e0c3bce08adae996d492937b">popot::math::random_from_array</a>(_probabilities);
<a name="l00593"></a>00593 
<a name="l00594"></a>00594               <span class="comment">// Randomly select another source, different from the current source</span>
<a name="l00595"></a>00595               other_source = (size_t) <a class="code" href="namespacepopot_1_1math.html#aff66c3835eec2f4653b273e25e8c841b">popot::math::uniform_random</a>(0, _nb_employed);
<a name="l00596"></a>00596               <span class="keywordflow">while</span>(other_source == i)
<a name="l00597"></a>00597                 other_source = (size_t) <a class="code" href="namespacepopot_1_1math.html#aff66c3835eec2f4653b273e25e8c841b">popot::math::uniform_random</a>(0, _nb_employed);
<a name="l00598"></a>00598 
<a name="l00599"></a>00599               _foodSources[selected_source].<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#a6a3fe094b5d26a516d79ada8cd2ca840">combine</a>(_foodSources[other_source], _lbound, _ubound, _cost_function);
<a name="l00600"></a>00600               
<a name="l00601"></a>00601             }
<a name="l00602"></a>00602         }
<a name="l00603"></a>00603 
<a name="l00604"></a>00604         <span class="keywordtype">void</span> scoutPhase(<span class="keywordtype">void</span>)
<a name="l00605"></a>00605         {
<a name="l00606"></a>00606           <span class="comment">// Scout phase</span>
<a name="l00607"></a>00607           <span class="comment">// We browse all the food sources</span>
<a name="l00608"></a>00608           <span class="comment">// If a source has a counter higher than the limit</span>
<a name="l00609"></a>00609           <span class="comment">// we reset it</span>
<a name="l00610"></a>00610           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00611"></a>00611             <span class="keywordflow">if</span>(_foodSources[i].getCounter() &gt;= _limitForScout)
<a name="l00612"></a>00612               _foodSources[i].<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#afa0b8dc32f3247cc303eca843b5965b4">init</a>(_lbound, _ubound, _cost_function);
<a name="l00613"></a>00613         }
<a name="l00614"></a>00614 
<a name="l00615"></a>00615       <span class="keyword">public</span>:
<a name="l00616"></a>00616 
<a name="l00617"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#aa2e1de2b45b4c8c1c83b3ef496968933">00617</a>         <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#aa2e1de2b45b4c8c1c83b3ef496968933">Base</a>(<span class="keywordtype">int</span> colony_size, <span class="keywordtype">int</span> dimension, <span class="keyword">const</span> LBOUND_FUNC &amp;lbound, <span class="keyword">const</span> UBOUND_FUNC &amp;ubound, <span class="keyword">const</span> STOP_CRITERIA &amp;stop_criteria, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function)
<a name="l00618"></a>00618           : _epoch(0), 
<a name="l00619"></a>00619             _CS(colony_size), 
<a name="l00620"></a>00620             _dimension(dimension), 
<a name="l00621"></a>00621             _limitForScout(colony_size * dimension / 2), 
<a name="l00622"></a>00622             _nb_employed(colony_size/2), 
<a name="l00623"></a>00623             _nb_onlookers(colony_size/2), 
<a name="l00624"></a>00624             _probabilities(0), 
<a name="l00625"></a>00625             _foodSources(0), 
<a name="l00626"></a>00626             _bestSource(), 
<a name="l00627"></a>00627             _lbound(lbound), 
<a name="l00628"></a>00628             _ubound(ubound), 
<a name="l00629"></a>00629             _stop_criteria(stop_criteria), 
<a name="l00630"></a>00630           _cost_function(cost_function)
<a name="l00631"></a>00631         {
<a name="l00632"></a>00632           <span class="comment">// Initialize our populations</span>
<a name="l00633"></a>00633           _foodSources = <span class="keyword">new</span> <a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html">FoodSourceType</a>[_nb_employed];
<a name="l00634"></a>00634           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00635"></a>00635             _foodSources[i] = <a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html">FoodSourceType</a>(_dimension);
<a name="l00636"></a>00636 
<a name="l00637"></a>00637           <span class="comment">// And the probabilities of their solutions</span>
<a name="l00638"></a>00638           _probabilities = <span class="keyword">new</span> <span class="keywordtype">double</span>[_nb_employed];
<a name="l00639"></a>00639 
<a name="l00640"></a>00640         }
<a name="l00641"></a>00641 
<a name="l00642"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a83ce052685d8aff78d6b0d6ee0e24cb8">00642</a>         <span class="keyword">virtual</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a83ce052685d8aff78d6b0d6ee0e24cb8">~Base</a>(<span class="keywordtype">void</span>)
<a name="l00643"></a>00643         {
<a name="l00644"></a>00644           <span class="keyword">delete</span>[] _foodSources;
<a name="l00645"></a>00645           <span class="keyword">delete</span>[] _probabilities;
<a name="l00646"></a>00646         }
<a name="l00647"></a>00647 
<a name="l00648"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a61bc421444263c2080bc3a53c55fc87e">00648</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a61bc421444263c2080bc3a53c55fc87e">init</a>(<span class="keywordtype">void</span>)
<a name="l00649"></a>00649         {
<a name="l00650"></a>00650           <span class="comment">// Initialize the positions and fitnesses</span>
<a name="l00651"></a>00651           <span class="comment">// of the employed bees</span>
<a name="l00652"></a>00652           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00653"></a>00653             _foodSources[i].<a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a61bc421444263c2080bc3a53c55fc87e">init</a>(_lbound, _ubound, _cost_function);
<a name="l00654"></a>00654 
<a name="l00655"></a>00655           _bestSource = _foodSources[0];
<a name="l00656"></a>00656 
<a name="l00657"></a>00657           _epoch = 0;
<a name="l00658"></a>00658 
<a name="l00659"></a>00659           <span class="comment">// Keep track of the best solution</span>
<a name="l00660"></a>00660           findBestSource();
<a name="l00661"></a>00661         }
<a name="l00662"></a>00662 
<a name="l00663"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ac5653e1f8a163cd8fe530010be4b8ccd">00663</a>         <span class="keywordtype">int</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ac5653e1f8a163cd8fe530010be4b8ccd">getEpoch</a>(<span class="keywordtype">void</span>)
<a name="l00664"></a>00664         {
<a name="l00665"></a>00665           <span class="keywordflow">return</span> _epoch;
<a name="l00666"></a>00666         }
<a name="l00667"></a>00667 
<a name="l00668"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a5e9812c32d155dc7f86f3f5473f73d48">00668</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a5e9812c32d155dc7f86f3f5473f73d48">step</a>(<span class="keywordtype">void</span>)
<a name="l00669"></a>00669         {
<a name="l00670"></a>00670           <span class="comment">// Employed bees phase</span>
<a name="l00671"></a>00671           employedPhase();
<a name="l00672"></a>00672           
<a name="l00673"></a>00673           <span class="comment">// Onlooker bees phase</span>
<a name="l00674"></a>00674           onlookerPhase();
<a name="l00675"></a>00675 
<a name="l00676"></a>00676           <span class="comment">// Scout bees phase</span>
<a name="l00677"></a>00677           scoutPhase();
<a name="l00678"></a>00678 
<a name="l00679"></a>00679           <span class="comment">// Memorize the best solution</span>
<a name="l00680"></a>00680           findBestSource();
<a name="l00681"></a>00681 
<a name="l00682"></a>00682           _epoch ++;
<a name="l00683"></a>00683         }
<a name="l00684"></a>00684 
<a name="l00685"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a1d4290f2e145a9b9cd553cae8031bbef">00685</a>         <a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html">FoodSourceType</a>&amp; <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a1d4290f2e145a9b9cd553cae8031bbef">getBest</a>()
<a name="l00686"></a>00686         {
<a name="l00687"></a>00687           <span class="keywordflow">return</span> _bestSource;
<a name="l00688"></a>00688         }
<a name="l00689"></a>00689 
<a name="l00690"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ae9f96feee980455377c4c1a8b26af383">00690</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ae9f96feee980455377c4c1a8b26af383">run</a>(<span class="keywordtype">void</span>)
<a name="l00691"></a>00691         {
<a name="l00692"></a>00692           <span class="keywordflow">while</span>(!_stop_criteria(_bestSource.<a class="code" href="classpopot_1_1ABC_1_1individuals_1_1FoodSource.html#a5ced1dda1140e9afb922d959499540d7">getFValue</a>(),_epoch))
<a name="l00693"></a>00693             {
<a name="l00694"></a>00694               <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#a5e9812c32d155dc7f86f3f5473f73d48">step</a>();
<a name="l00695"></a>00695             }
<a name="l00696"></a>00696         }
<a name="l00697"></a>00697 
<a name="l00698"></a><a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ad1ca0ed4a9eb9e645e38b5f78d4b53d2">00698</a>         <span class="keywordtype">void</span> <a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html#ad1ca0ed4a9eb9e645e38b5f78d4b53d2">print</a>(<span class="keywordtype">void</span>)
<a name="l00699"></a>00699         {
<a name="l00700"></a>00700           std::cout &lt;&lt; <span class="stringliteral">&quot;Artificial Bee Colony &quot;</span> &lt;&lt; std::endl;
<a name="l00701"></a>00701           std::cout &lt;&lt; <span class="stringliteral">&quot;Food Sources : &quot;</span> &lt;&lt; std::endl;
<a name="l00702"></a>00702           <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0 ; i &lt; _nb_employed ; ++i)
<a name="l00703"></a>00703             std::cout &lt;&lt; _foodSources[i] &lt;&lt; std::endl;
<a name="l00704"></a>00704           std::cout &lt;&lt; <span class="stringliteral">&quot;Best source : &quot;</span> &lt;&lt; _bestSource &lt;&lt; std::endl;
<a name="l00705"></a>00705 
<a name="l00706"></a>00706         }
<a name="l00707"></a>00707       }; <span class="comment">// class Base</span>
<a name="l00708"></a>00708     } <span class="comment">// namespace algorithm</span>
<a name="l00709"></a>00709   } <span class="comment">// namespace ABC</span>
<a name="l00710"></a>00710 
<a name="l00711"></a>00711 
<a name="l00712"></a><a class="code" href="namespacepopot_1_1algorithm.html">00712</a>   <span class="keyword">namespace </span>algorithm
<a name="l00713"></a>00713   {
<a name="l00714"></a>00714 
<a name="l00718"></a>00718     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00719"></a>00719     popot<a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html">::ABC::algorithm::Base&lt;LBOUND_FUNC, UBOUND_FUNC, STOP_CRITERIA, COST_FUNCTION&gt;</a> 
<a name="l00720"></a><a class="code" href="namespacepopot_1_1algorithm.html#ac3dab4425f17e55c3f7b8305d31a2051">00720</a>     <a class="code" href="namespacepopot_1_1algorithm.html#ac3dab4425f17e55c3f7b8305d31a2051">abc</a>(<span class="keywordtype">size_t</span> colony_size, <span class="keywordtype">size_t</span> dimension,
<a name="l00721"></a>00721         <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00722"></a>00722         <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION&amp; func)  {
<a name="l00723"></a>00723       <span class="keywordflow">return</span> popot<a class="code" href="classpopot_1_1ABC_1_1algorithm_1_1Base.html">::ABC::algorithm::Base&lt;LBOUND_FUNC, UBOUND_FUNC, STOP_CRITERIA, COST_FUNCTION&gt;</a>(colony_size, dimension, lbound, ubound, stop, func);
<a name="l00724"></a>00724     };
<a name="l00725"></a>00725 
<a name="l00726"></a>00726     <span class="comment">// The parameters for updating the velocity of the particles</span>
<a name="l00727"></a>00727     <span class="keyword">class </span>SPSO2006_Params
<a name="l00728"></a>00728     {
<a name="l00729"></a>00729     <span class="keyword">public</span>:
<a name="l00730"></a><a class="code" href="classpopot_1_1algorithm_1_1SPSO2006__Params.html#ab74dcae7efa8c1ffabce1b8a89812779">00730</a>       <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classpopot_1_1algorithm_1_1SPSO2006__Params.html#ab74dcae7efa8c1ffabce1b8a89812779">w</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> 1.0/(2.0*log(2.0));};
<a name="l00731"></a><a class="code" href="classpopot_1_1algorithm_1_1SPSO2006__Params.html#aeb215b1eae6d6b221f33c990b62077ee">00731</a>       <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classpopot_1_1algorithm_1_1SPSO2006__Params.html#aeb215b1eae6d6b221f33c990b62077ee">c</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> 0.5 + log(2.0);};
<a name="l00732"></a>00732     };
<a name="l00733"></a>00733     
<a name="l00734"></a>00734 
<a name="l00735"></a>00735     <span class="comment">// The particle type, shortcut simplifying the expression of the types in spso2006</span>
<a name="l00736"></a><a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">00736</a>     <span class="keyword">typedef</span> popot<a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">::PSO::particle::Particle&lt;&gt;</a> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>;
<a name="l00737"></a>00737 
<a name="l00742"></a>00742     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00743"></a>00743       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l00744"></a>00744                                   UBOUND_FUNC, 
<a name="l00745"></a>00745                                   STOP_CRITERIA,  
<a name="l00746"></a>00746                                   COST_FUNCTION,
<a name="l00747"></a>00747                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00748"></a>00748                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00749"></a>00749                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00750"></a>00750                                 <span class="keywordtype">void</span>(*)(<a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>&amp;),
<a name="l00751"></a>00751                                 <span class="keywordtype">void</span>(*)(<a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>&amp;), 
<a name="l00752"></a>00752                                 <span class="keywordtype">void</span>(*)(<a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>&amp;),
<a name="l00753"></a>00753                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00754"></a>00754                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00755"></a>00755                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00756"></a>00756                                 <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a>&gt;
<a name="l00757"></a><a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">00757</a>       <a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">spso2006</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l00758"></a>00758              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00759"></a>00759                <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function, <span class="keywordtype">bool</span> reevaluate_best=<span class="keyword">false</span>) {
<a name="l00760"></a>00760 
<a name="l00761"></a>00761       <span class="comment">// Particle type</span>
<a name="l00762"></a>00762       <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a> p;
<a name="l00763"></a>00763 
<a name="l00764"></a>00764       <span class="comment">// Position and velocity updates</span>
<a name="l00765"></a>00765       <span class="keyword">auto</span> position_update = popot::PSO::particle::updatePosition&lt;ParticleSPSO&gt;;
<a name="l00766"></a>00766       <span class="keyword">auto</span> velocity_update = popot::PSO::particle::updateVelocity_spso2006&lt;ParticleSPSO, SPSO2006_Params&gt;;
<a name="l00767"></a>00767      
<a name="l00768"></a>00768       <span class="comment">// Initialization functions</span>
<a name="l00769"></a>00769       <span class="keyword">auto</span> init_position_function = popot::initializer::position::uniform_random&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00770"></a>00770       <span class="keyword">auto</span> init_velocity_function = popot::initializer::velocity::half_diff&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00771"></a>00771       
<a name="l00772"></a>00772       <span class="comment">// The confinement method</span>
<a name="l00773"></a>00773       <span class="keyword">auto</span> <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a> = popot::confinement::confine&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00774"></a>00774 
<a name="l00775"></a>00775       <span class="comment">// The rule to update the best position</span>
<a name="l00776"></a>00776       <span class="keyword">auto</span> best_position_update = popot::PSO::particle::updateBestPosition&lt;ParticleSPSO&gt;;
<a name="l00777"></a>00777 
<a name="l00778"></a>00778       <span class="comment">// Topology</span>
<a name="l00779"></a>00779       <span class="comment">//auto topology = popot::PSO::topology::full_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00780"></a>00780       <span class="comment">//auto topology = popot::PSO::topology::ring_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00781"></a>00781       <span class="comment">//auto topology = popot::PSO::topology::vonNeuman_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00782"></a>00782       <span class="keyword">auto</span> topology = popot::PSO::topology::randomInformants_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;
<a name="l00783"></a>00783       <span class="comment">//auto topology = popot::PSO::topology::adaptiveRandom_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;</span>
<a name="l00784"></a>00784 
<a name="l00785"></a>00785 
<a name="l00786"></a>00786       <span class="keyword">auto</span> algo = <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a12c2af29b09b1b5beecafc31076ce47a">popot::PSO::algorithm::base</a>(swarm_size, dimension, 
<a name="l00787"></a>00787                                               lbound, ubound, stop, cost_function, 
<a name="l00788"></a>00788                                               topology, position_update, velocity_update, best_position_update, <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a>, init_position_function, init_velocity_function,
<a name="l00789"></a>00789                                               p, <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">popot::PSO::algorithm::ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>, reevaluate_best); 
<a name="l00790"></a>00790       <span class="keywordflow">return</span> algo;
<a name="l00791"></a>00791     }
<a name="l00792"></a>00792 
<a name="l00793"></a>00793 
<a name="l00794"></a>00794     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00795"></a>00795       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l00796"></a>00796                                   UBOUND_FUNC, 
<a name="l00797"></a>00797                                   STOP_CRITERIA,  
<a name="l00798"></a>00798                                   COST_FUNCTION,
<a name="l00799"></a>00799                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00800"></a>00800                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00801"></a>00801                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00802"></a>00802                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00803"></a>00803                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00804"></a>00804                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00805"></a>00805                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00806"></a>00806                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00807"></a>00807                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00808"></a>00808                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00809"></a>00809     <a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">spso2006</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l00810"></a>00810              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00811"></a>00811              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00812"></a>00812 
<a name="l00813"></a>00813       <span class="keywordtype">size_t</span> swarm_size = 10 + int(2.0 * sqrt(dimension));
<a name="l00814"></a>00814       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">spso2006</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">false</span>);
<a name="l00815"></a>00815     }
<a name="l00816"></a>00816 
<a name="l00817"></a>00817     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00818"></a>00818       popot::PSO::algorithm::Base&lt;LBOUND_FUNC, 
<a name="l00819"></a>00819                                   UBOUND_FUNC, 
<a name="l00820"></a>00820                                   STOP_CRITERIA,  
<a name="l00821"></a>00821                                   COST_FUNCTION,
<a name="l00822"></a>00822                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00823"></a>00823                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00824"></a>00824                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00825"></a>00825                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00826"></a>00826                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00827"></a>00827                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00828"></a>00828                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00829"></a>00829                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00830"></a>00830                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00831"></a>00831                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00832"></a><a class="code" href="namespacepopot_1_1algorithm.html#a14415fa4f56241bcacef6f2faa897010">00832</a>       <a class="code" href="namespacepopot_1_1algorithm.html#a14415fa4f56241bcacef6f2faa897010">stochastic_spso2006</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l00833"></a>00833              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00834"></a>00834              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00835"></a>00835 
<a name="l00836"></a>00836       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">spso2006</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l00837"></a>00837     }
<a name="l00838"></a>00838 
<a name="l00839"></a>00839     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00840"></a>00840       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l00841"></a>00841                                   UBOUND_FUNC, 
<a name="l00842"></a>00842                                   STOP_CRITERIA,  
<a name="l00843"></a>00843                                   COST_FUNCTION,
<a name="l00844"></a>00844                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00845"></a>00845                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00846"></a>00846                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00847"></a>00847                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00848"></a>00848                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00849"></a>00849                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00850"></a>00850                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00851"></a>00851                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00852"></a>00852                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00853"></a>00853                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00854"></a>00854     <a class="code" href="namespacepopot_1_1algorithm.html#a14415fa4f56241bcacef6f2faa897010">stochastic_spso2006</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l00855"></a>00855              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00856"></a>00856              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00857"></a>00857 
<a name="l00858"></a>00858       <span class="keywordtype">size_t</span> swarm_size = 10 + int(2.0 * sqrt(dimension));
<a name="l00859"></a>00859 
<a name="l00860"></a>00860       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a7d5edb4d22d52f7670f471cda3bcae60">spso2006</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l00861"></a>00861     }
<a name="l00862"></a>00862 
<a name="l00863"></a>00863 
<a name="l00867"></a>00867     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00868"></a>00868       popot::PSO::algorithm::Base&lt;LBOUND_FUNC, 
<a name="l00869"></a>00869                                   UBOUND_FUNC, 
<a name="l00870"></a>00870                                   STOP_CRITERIA,  
<a name="l00871"></a>00871                                   COST_FUNCTION,
<a name="l00872"></a>00872                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00873"></a>00873                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00874"></a>00874                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00875"></a>00875                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00876"></a>00876                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00877"></a>00877                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00878"></a>00878                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00879"></a>00879                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00880"></a>00880                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00881"></a>00881                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00882"></a><a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">00882</a>       <a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">spso2007</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l00883"></a>00883              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00884"></a>00884                <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function, <span class="keywordtype">bool</span> reevaluate_best=<span class="keyword">false</span>) {
<a name="l00885"></a>00885 
<a name="l00886"></a>00886       <span class="comment">// Particle type</span>
<a name="l00887"></a>00887       <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a> p;
<a name="l00888"></a>00888 
<a name="l00889"></a>00889       <span class="comment">// Position and velocity updates</span>
<a name="l00890"></a>00890       <span class="keyword">auto</span> position_update = popot::PSO::particle::updatePosition&lt;ParticleSPSO&gt;;
<a name="l00891"></a>00891       <span class="keyword">auto</span> velocity_update = popot::PSO::particle::updateVelocity_spso2007&lt;ParticleSPSO, SPSO2006_Params&gt;;
<a name="l00892"></a>00892      
<a name="l00893"></a>00893       <span class="comment">// Initialization functions</span>
<a name="l00894"></a>00894       <span class="keyword">auto</span> init_position_function = popot::initializer::position::uniform_random&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00895"></a>00895       <span class="keyword">auto</span> init_velocity_function = popot::initializer::velocity::half_diff&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00896"></a>00896 
<a name="l00897"></a>00897       <span class="comment">// The confinement method</span>
<a name="l00898"></a>00898       <span class="keyword">auto</span> <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a> = popot::confinement::confine&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l00899"></a>00899 
<a name="l00900"></a>00900       <span class="comment">// The rule to update the best position</span>
<a name="l00901"></a>00901       <span class="keyword">auto</span> best_position_update = popot::PSO::particle::updateBestPosition&lt;ParticleSPSO&gt;;
<a name="l00902"></a>00902 
<a name="l00903"></a>00903 
<a name="l00904"></a>00904       <span class="comment">// Topology</span>
<a name="l00905"></a>00905       <span class="comment">//auto topology = popot::PSO::topology::full_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00906"></a>00906       <span class="comment">//auto topology = popot::PSO::topology::ring_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00907"></a>00907       <span class="comment">//auto topology = popot::PSO::topology::vonNeuman_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l00908"></a>00908       <span class="comment">//auto topology = popot::PSO::topology::randomInformants_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;</span>
<a name="l00909"></a>00909       <span class="keyword">auto</span> topology = popot::PSO::topology::adaptiveRandom_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;
<a name="l00910"></a>00910 
<a name="l00911"></a>00911       <span class="keyword">auto</span> algo = <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a12c2af29b09b1b5beecafc31076ce47a">popot::PSO::algorithm::base</a>(swarm_size, dimension, 
<a name="l00912"></a>00912                                               lbound, ubound, stop, cost_function, 
<a name="l00913"></a>00913                                               topology, position_update, velocity_update, best_position_update, <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a>, init_position_function, init_velocity_function,
<a name="l00914"></a>00914                                               p, <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">popot::PSO::algorithm::ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>, reevaluate_best); 
<a name="l00915"></a>00915       <span class="keywordflow">return</span> algo;
<a name="l00916"></a>00916     }
<a name="l00917"></a>00917 
<a name="l00918"></a>00918     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00919"></a>00919       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l00920"></a>00920                                   UBOUND_FUNC, 
<a name="l00921"></a>00921                                   STOP_CRITERIA,  
<a name="l00922"></a>00922                                   COST_FUNCTION,
<a name="l00923"></a>00923                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00924"></a>00924                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00925"></a>00925                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00926"></a>00926                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00927"></a>00927                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00928"></a>00928                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00929"></a>00929                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00930"></a>00930                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00931"></a>00931                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00932"></a>00932                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00933"></a>00933     <a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">spso2007</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l00934"></a>00934              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00935"></a>00935              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00936"></a>00936 
<a name="l00937"></a>00937       <span class="keywordtype">size_t</span> swarm_size = 10 + int(2.0 * sqrt(dimension));
<a name="l00938"></a>00938 
<a name="l00939"></a>00939       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">spso2007</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">false</span>);
<a name="l00940"></a>00940     }
<a name="l00941"></a>00941 
<a name="l00942"></a>00942     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00943"></a>00943       popot::PSO::algorithm::Base&lt;LBOUND_FUNC, 
<a name="l00944"></a>00944                                   UBOUND_FUNC, 
<a name="l00945"></a>00945                                   STOP_CRITERIA,  
<a name="l00946"></a>00946                                   COST_FUNCTION,
<a name="l00947"></a>00947                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00948"></a>00948                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00949"></a>00949                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00950"></a>00950                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00951"></a>00951                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00952"></a>00952                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00953"></a>00953                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00954"></a>00954                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00955"></a>00955                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00956"></a>00956                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00957"></a><a class="code" href="namespacepopot_1_1algorithm.html#af5df98dde416975b0400cbfac1a0c1bf">00957</a>     <a class="code" href="namespacepopot_1_1algorithm.html#af5df98dde416975b0400cbfac1a0c1bf">stochastic_spso2007</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l00958"></a>00958              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00959"></a>00959              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00960"></a>00960 
<a name="l00961"></a>00961       <span class="keywordtype">size_t</span> swarm_size = 10 + int(2.0 * sqrt(dimension));
<a name="l00962"></a>00962 
<a name="l00963"></a>00963       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">spso2007</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l00964"></a>00964     }
<a name="l00965"></a>00965 
<a name="l00966"></a>00966     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00967"></a>00967       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l00968"></a>00968                                   UBOUND_FUNC, 
<a name="l00969"></a>00969                                   STOP_CRITERIA,  
<a name="l00970"></a>00970                                   COST_FUNCTION,
<a name="l00971"></a>00971                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00972"></a>00972                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00973"></a>00973                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l00974"></a>00974                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00975"></a>00975                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l00976"></a>00976                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l00977"></a>00977                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00978"></a>00978                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00979"></a>00979                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l00980"></a>00980                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l00981"></a>00981       <a class="code" href="namespacepopot_1_1algorithm.html#af5df98dde416975b0400cbfac1a0c1bf">stochastic_spso2007</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l00982"></a>00982              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l00983"></a>00983              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l00984"></a>00984 
<a name="l00985"></a>00985       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#a531d12799bf37ed4f15d16e4ce172c2c">spso2007</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l00986"></a>00986     }
<a name="l00987"></a>00987     
<a name="l00988"></a>00988 
<a name="l00992"></a>00992     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l00993"></a>00993       popot::PSO::algorithm::Base&lt;LBOUND_FUNC, 
<a name="l00994"></a>00994                                   UBOUND_FUNC, 
<a name="l00995"></a>00995                                   STOP_CRITERIA,  
<a name="l00996"></a>00996                                   COST_FUNCTION,
<a name="l00997"></a>00997                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l00998"></a>00998                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l00999"></a>00999                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l01000"></a>01000                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01001"></a>01001                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l01002"></a>01002                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01003"></a>01003                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01004"></a>01004                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01005"></a>01005                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01006"></a>01006                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l01007"></a><a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">01007</a>       <a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">spso2011</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l01008"></a>01008              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l01009"></a>01009                <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function, <span class="keywordtype">bool</span> reevaluate_best=<span class="keyword">false</span>) {
<a name="l01010"></a>01010 
<a name="l01011"></a>01011       <span class="comment">// Particle type</span>
<a name="l01012"></a>01012       <a class="code" href="classpopot_1_1PSO_1_1particle_1_1Particle.html">ParticleSPSO</a> p;
<a name="l01013"></a>01013 
<a name="l01014"></a>01014       <span class="comment">// Position and velocity updates</span>
<a name="l01015"></a>01015       <span class="keyword">auto</span> position_update = popot::PSO::particle::updatePosition&lt;ParticleSPSO&gt;;
<a name="l01016"></a>01016       <span class="keyword">auto</span> velocity_update = popot::PSO::particle::updateVelocity_spso2011&lt;ParticleSPSO, SPSO2006_Params&gt;;
<a name="l01017"></a>01017      
<a name="l01018"></a>01018       <span class="comment">// Initialization functions</span>
<a name="l01019"></a>01019       <span class="keyword">auto</span> init_position_function = popot::initializer::position::uniform_random&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l01020"></a>01020       <span class="keyword">auto</span> init_velocity_function = popot::initializer::velocity::half_diff&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l01021"></a>01021 
<a name="l01022"></a>01022       <span class="comment">// The confinement method</span>
<a name="l01023"></a>01023       <span class="keyword">auto</span> <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a> = popot::confinement::confine_spso2011&lt;ParticleSPSO::VECTOR_TYPE, LBOUND_FUNC, UBOUND_FUNC&gt;;
<a name="l01024"></a>01024     
<a name="l01025"></a>01025 
<a name="l01026"></a>01026       <span class="comment">// The rule to update the best position</span>
<a name="l01027"></a>01027       <span class="keyword">auto</span> best_position_update = popot::PSO::particle::updateBestPosition&lt;ParticleSPSO&gt;;
<a name="l01028"></a>01028 
<a name="l01029"></a>01029 
<a name="l01030"></a>01030       <span class="comment">// Topology</span>
<a name="l01031"></a>01031       <span class="comment">//auto topology = popot::PSO::topology::full_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l01032"></a>01032       <span class="comment">//auto topology = popot::PSO::topology::ring_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l01033"></a>01033       <span class="comment">//auto topology = popot::PSO::topology::vonNeuman_fillNeighborhoods&lt;ParticleSPSO&gt;;</span>
<a name="l01034"></a>01034       <span class="comment">//auto topology = popot::PSO::topology::randomInformants_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;</span>
<a name="l01035"></a>01035       <span class="keyword">auto</span> topology = popot::PSO::topology::adaptiveRandom_fillNeighborhoods&lt;ParticleSPSO, 3, true&gt;;
<a name="l01036"></a>01036 
<a name="l01037"></a>01037       <span class="keyword">auto</span> algo = <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a12c2af29b09b1b5beecafc31076ce47a">popot::PSO::algorithm::base</a>(swarm_size, dimension, 
<a name="l01038"></a>01038                                               lbound, ubound, stop, cost_function, 
<a name="l01039"></a>01039                                               topology, position_update, velocity_update, best_position_update, <a class="code" href="namespacepopot_1_1confinement.html#a0925a059bfe9d151acf17c4ea4e9cd7e">confine</a>, init_position_function, init_velocity_function,
<a name="l01040"></a>01040                                               p, <a class="code" href="namespacepopot_1_1PSO_1_1algorithm.html#a1807a99f98f02dd70a74ab24d56f0953ae070687937fd58a1308a3e7cd25f2601">popot::PSO::algorithm::ASYNCHRONOUS_WITHOUT_SHUFFLE_EVALUATION</a>, reevaluate_best); 
<a name="l01041"></a>01041 
<a name="l01042"></a>01042       <span class="keywordflow">return</span> algo;
<a name="l01043"></a>01043     }
<a name="l01044"></a>01044 
<a name="l01045"></a>01045 
<a name="l01046"></a>01046     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l01047"></a>01047       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l01048"></a>01048                                   UBOUND_FUNC, 
<a name="l01049"></a>01049                                   STOP_CRITERIA,  
<a name="l01050"></a>01050                                   COST_FUNCTION,
<a name="l01051"></a>01051                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l01052"></a>01052                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l01053"></a>01053                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l01054"></a>01054                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01055"></a>01055                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l01056"></a>01056                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01057"></a>01057                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01058"></a>01058                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01059"></a>01059                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01060"></a>01060                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l01061"></a>01061     <a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">spso2011</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l01062"></a>01062              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l01063"></a>01063              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l01064"></a>01064 
<a name="l01065"></a>01065       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">spso2011</a>(40, dimension, lbound, ubound, stop, cost_function, <span class="keyword">false</span>);
<a name="l01066"></a>01066     }
<a name="l01067"></a>01067 
<a name="l01068"></a>01068     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l01069"></a>01069       popot::PSO::algorithm::Base&lt;LBOUND_FUNC, 
<a name="l01070"></a>01070                                   UBOUND_FUNC, 
<a name="l01071"></a>01071                                   STOP_CRITERIA,  
<a name="l01072"></a>01072                                   COST_FUNCTION,
<a name="l01073"></a>01073                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l01074"></a>01074                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l01075"></a>01075                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l01076"></a>01076                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01077"></a>01077                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l01078"></a>01078                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01079"></a>01079                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01080"></a>01080                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01081"></a>01081                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01082"></a>01082                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l01083"></a><a class="code" href="namespacepopot_1_1algorithm.html#a750ccafd0c7497bb5d58cf719c493856">01083</a>       <a class="code" href="namespacepopot_1_1algorithm.html#a750ccafd0c7497bb5d58cf719c493856">stochastic_spso2011</a>(<span class="keywordtype">size_t</span> swarm_size, <span class="keywordtype">size_t</span> dimension,
<a name="l01084"></a>01084              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l01085"></a>01085              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l01086"></a>01086 
<a name="l01087"></a>01087       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">spso2011</a>(swarm_size, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l01088"></a>01088     }
<a name="l01089"></a>01089 
<a name="l01090"></a>01090     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> LBOUND_FUNC, <span class="keyword">typename</span> UBOUND_FUNC, <span class="keyword">typename</span> STOP_CRITERIA, <span class="keyword">typename</span> COST_FUNCTION&gt;
<a name="l01091"></a>01091       popot<a class="code" href="classpopot_1_1PSO_1_1algorithm_1_1Base.html">::PSO::algorithm::Base</a>&lt;LBOUND_FUNC, 
<a name="l01092"></a>01092                                   UBOUND_FUNC, 
<a name="l01093"></a>01093                                   STOP_CRITERIA,  
<a name="l01094"></a>01094                                   COST_FUNCTION,
<a name="l01095"></a>01095                                 void(*)(std::vector&lt;ParticleSPSO &gt;&amp;, 
<a name="l01096"></a>01096                                         std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;, 
<a name="l01097"></a>01097                                         std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;),
<a name="l01098"></a>01098                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01099"></a>01099                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;), 
<a name="l01100"></a>01100                                 <span class="keywordtype">void</span>(*)(<a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&amp;),
<a name="l01101"></a>01101                                 <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01102"></a>01102                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01103"></a>01103                                   <span class="keywordtype">void</span>(*)(<span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">typename</span> <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>::VECTOR_TYPE&amp;, <span class="keyword">const</span> LBOUND_FUNC&amp;, <span class="keyword">const</span> UBOUND_FUNC&amp;),
<a name="l01104"></a>01104                                 <a class="code" href="namespacepopot_1_1algorithm.html#a20b54d7f0aba2121bd153fb0de50f3f4">ParticleSPSO</a>&gt;
<a name="l01105"></a>01105     <a class="code" href="namespacepopot_1_1algorithm.html#a750ccafd0c7497bb5d58cf719c493856">stochastic_spso2011</a>(<span class="keywordtype">size_t</span> dimension,
<a name="l01106"></a>01106              <span class="keyword">const</span> LBOUND_FUNC&amp; lbound, <span class="keyword">const</span> UBOUND_FUNC&amp; ubound,
<a name="l01107"></a>01107              <span class="keyword">const</span> STOP_CRITERIA&amp; stop, <span class="keyword">const</span> COST_FUNCTION &amp;cost_function) {
<a name="l01108"></a>01108 
<a name="l01109"></a>01109       <span class="keywordflow">return</span> <a class="code" href="namespacepopot_1_1algorithm.html#aafd0464056160a6c9e1cf33409e053f0">spso2011</a>(40, dimension, lbound, ubound, stop, cost_function, <span class="keyword">true</span>);
<a name="l01110"></a>01110     }
<a name="l01111"></a>01111 
<a name="l01112"></a>01112     <span class="comment">/* /\** */</span>
<a name="l01113"></a>01113     <span class="comment">/*  * Builds the barebone algorithm */</span>
<a name="l01114"></a>01114     <span class="comment">/*  *\/ */</span>
<a name="l01115"></a>01115     <span class="comment">/* template&lt; typename LBOUND_FUNC, typename UBOUND_FUNC, typename STOP_CRITERIA, typename COST_FUNCTION&gt; */</span>
<a name="l01116"></a>01116     <span class="comment">/* popot::PSO::algorithm::Base&lt;LBOUND_FUNC, UBOUND_FUNC, STOP_CRITERIA, COST_FUNCTION,  */</span>
<a name="l01117"></a>01117     <span class="comment">/*                          void(*)(std::vector&lt;ParticleSPSO &gt;&amp;,  */</span>
<a name="l01118"></a>01118     <span class="comment">/*                                  std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;,  */</span>
<a name="l01119"></a>01119     <span class="comment">/*                                  std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;), */</span>
<a name="l01120"></a>01120     <span class="comment">/*                          void(*)(ParticleSPSO&amp;), */</span>
<a name="l01121"></a>01121     <span class="comment">/*                          void(*)(ParticleSPSO&amp;),  */</span>
<a name="l01122"></a>01122     <span class="comment">/*                          void(*)(ParticleSPSO&amp;), */</span>
<a name="l01123"></a>01123     <span class="comment">/*                          ParticleSPSO&gt; */</span>
<a name="l01124"></a>01124     <span class="comment">/* barebone(size_t dimension, */</span>
<a name="l01125"></a>01125     <span class="comment">/*                  const LBOUND_FUNC&amp; lbound, const UBOUND_FUNC&amp; ubound, */</span>
<a name="l01126"></a>01126     <span class="comment">/*                  const STOP_CRITERIA&amp; stop, const COST_FUNCTION&amp; cost_function) { */</span>
<a name="l01127"></a>01127     <span class="comment">/*   size_t swarm_size = 40; */</span>
<a name="l01128"></a>01128 
<a name="l01129"></a>01129     <span class="comment">/*   // Particle type */</span>
<a name="l01130"></a>01130     <span class="comment">/*   ParticleSPSO p; */</span>
<a name="l01131"></a>01131 
<a name="l01132"></a>01132     <span class="comment">/*   // Position and velocity updates */</span>
<a name="l01133"></a>01133     <span class="comment">/*   auto position_update = popot::PSO::particle::updatePosition_barebone&lt;ParticleSPSO&gt;; */</span>
<a name="l01134"></a>01134     <span class="comment">/*   auto velocity_update = popot::PSO::particle::updateVelocity_barebone&lt;ParticleSPSO&gt;; */</span>
<a name="l01135"></a>01135      
<a name="l01136"></a>01136     <span class="comment">/*   // Initialization functions */</span>
<a name="l01137"></a>01137     <span class="comment">/*   /\* */</span>
<a name="l01138"></a>01138     <span class="comment">/*  auto init_function = [lbound, ubound] (ParticleSPSO&amp; p) -&gt; void {  */</span>
<a name="l01139"></a>01139     <span class="comment">/*  popot::initializer::position::uniform_random&lt;ParticleSPSO::VECTOR_TYPE&gt;(p.getPosition(), lbound, ubound); */</span>
<a name="l01140"></a>01140     <span class="comment">/*  popot::initializer::velocity::half_diff&lt;ParticleSPSO::VECTOR_TYPE&gt;(p.getPosition(), p.getVelocity(), lbound, ubound); */</span>
<a name="l01141"></a>01141     <span class="comment">/*  }; */</span>
<a name="l01142"></a>01142     <span class="comment">/*   *\/ */</span>
<a name="l01143"></a>01143 
<a name="l01144"></a>01144     <span class="comment">/*   // The rule to update the best position */</span>
<a name="l01145"></a>01145     <span class="comment">/*   auto best_position_update = popot::PSO::particle::updateBestPosition&lt;ParticleSPSO&gt;; */</span>
<a name="l01146"></a>01146 
<a name="l01147"></a>01147     <span class="comment">/*   // Topology */</span>
<a name="l01148"></a>01148     <span class="comment">/*   auto topology = popot::PSO::topology::full_fillNeighborhoods&lt;ParticleSPSO&gt;; */</span>
<a name="l01149"></a>01149 
<a name="l01150"></a>01150     <span class="comment">/*   auto algo = popot::PSO::algorithm::base(swarm_size, dimension,  */</span>
<a name="l01151"></a>01151     <span class="comment">/*                                        lbound, ubound, stop, cost_function,  */</span>
<a name="l01152"></a>01152     <span class="comment">/*                                        topology, position_update, velocity_update, best_position_update,  */</span>
<a name="l01153"></a>01153     <span class="comment">/*                                        p, popot::PSO::algorithm::ASYNCHRONOUS_EVALUATION, false); */</span>
<a name="l01154"></a>01154     <span class="comment">/*   return algo; */</span>
<a name="l01155"></a>01155     <span class="comment">/* } */</span>
<a name="l01156"></a>01156 
<a name="l01157"></a>01157 
<a name="l01158"></a>01158     <span class="comment">/* /\** */</span>
<a name="l01159"></a>01159     <span class="comment">/*  * Builds the barebone algorithm */</span>
<a name="l01160"></a>01160     <span class="comment">/*  *\/ */</span>
<a name="l01161"></a>01161     <span class="comment">/* template&lt; typename LBOUND_FUNC, typename UBOUND_FUNC, typename STOP_CRITERIA, typename COST_FUNCTION&gt; */</span>
<a name="l01162"></a>01162     <span class="comment">/* popot::PSO::algorithm::Base&lt;LBOUND_FUNC, UBOUND_FUNC, STOP_CRITERIA, COST_FUNCTION,  */</span>
<a name="l01163"></a>01163     <span class="comment">/*                          void(*)(std::vector&lt;ParticleSPSO &gt;&amp;,  */</span>
<a name="l01164"></a>01164     <span class="comment">/*                                  std::vector&lt; typename ParticleSPSO::NeighborhoodType *&gt; &amp;,  */</span>
<a name="l01165"></a>01165     <span class="comment">/*                                  std::map&lt; size_t, std::vector&lt;size_t&gt; &gt; &amp;), */</span>
<a name="l01166"></a>01166     <span class="comment">/*                          void(*)(ParticleSPSO&amp;), */</span>
<a name="l01167"></a>01167     <span class="comment">/*                          void(*)(ParticleSPSO&amp;),  */</span>
<a name="l01168"></a>01168     <span class="comment">/*                          void(*)(ParticleSPSO&amp;), */</span>
<a name="l01169"></a>01169     <span class="comment">/*                          ParticleSPSO&gt; */</span>
<a name="l01170"></a>01170     <span class="comment">/* modified_barebone(size_t dimension, */</span>
<a name="l01171"></a>01171     <span class="comment">/*                  const LBOUND_FUNC&amp; lbound, const UBOUND_FUNC&amp; ubound, */</span>
<a name="l01172"></a>01172     <span class="comment">/*                  const STOP_CRITERIA&amp; stop, const COST_FUNCTION&amp; cost_function) { */</span>
<a name="l01173"></a>01173     <span class="comment">/*   size_t swarm_size = 40; */</span>
<a name="l01174"></a>01174 
<a name="l01175"></a>01175     <span class="comment">/*   // Particle type */</span>
<a name="l01176"></a>01176     <span class="comment">/*   ParticleSPSO p; */</span>
<a name="l01177"></a>01177 
<a name="l01178"></a>01178     <span class="comment">/*   // Position and velocity updates */</span>
<a name="l01179"></a>01179     <span class="comment">/*   auto position_update = popot::PSO::particle::updatePosition_barebone&lt;ParticleSPSO&gt;; */</span>
<a name="l01180"></a>01180     <span class="comment">/*   auto velocity_update = popot::PSO::particle::updateVelocity_modifiedBarebone&lt;ParticleSPSO&gt;; */</span>
<a name="l01181"></a>01181      
<a name="l01182"></a>01182     <span class="comment">/*   // Initialization functions */</span>
<a name="l01183"></a>01183     <span class="comment">/*   /\* */</span>
<a name="l01184"></a>01184     <span class="comment">/*  auto init_function = [lbound, ubound] (ParticleSPSO&amp; p) -&gt; void {  */</span>
<a name="l01185"></a>01185     <span class="comment">/*  popot::initializer::position::uniform_random&lt;ParticleSPSO::VECTOR_TYPE&gt;(p.getPosition(), lbound, ubound); */</span>
<a name="l01186"></a>01186     <span class="comment">/*  popot::initializer::velocity::half_diff&lt;ParticleSPSO::VECTOR_TYPE&gt;(p.getPosition(), p.getVelocity(), lbound, ubound); */</span>
<a name="l01187"></a>01187     <span class="comment">/*  }; */</span>
<a name="l01188"></a>01188     <span class="comment">/*   *\/ */</span>
<a name="l01189"></a>01189 
<a name="l01190"></a>01190     <span class="comment">/*   // The rule to update the best position */</span>
<a name="l01191"></a>01191     <span class="comment">/*   auto best_position_update = popot::PSO::particle::updateBestPosition&lt;ParticleSPSO&gt;; */</span>
<a name="l01192"></a>01192 
<a name="l01193"></a>01193     <span class="comment">/*   // Topology */</span>
<a name="l01194"></a>01194     <span class="comment">/*   auto topology = popot::PSO::topology::full_fillNeighborhoods&lt;ParticleSPSO&gt;; */</span>
<a name="l01195"></a>01195 
<a name="l01196"></a>01196     <span class="comment">/*   auto algo = popot::PSO::algorithm::base(swarm_size, dimension,  */</span>
<a name="l01197"></a>01197     <span class="comment">/*                                        lbound, ubound, stop, cost_function,  */</span>
<a name="l01198"></a>01198     <span class="comment">/*                                        topology, position_update, velocity_update, best_position_update,  */</span>
<a name="l01199"></a>01199     <span class="comment">/*                                        p, popot::PSO::algorithm::ASYNCHRONOUS_EVALUATION, false); */</span>
<a name="l01200"></a>01200     <span class="comment">/*   return algo; */</span>
<a name="l01201"></a>01201     <span class="comment">/* } */</span>
<a name="l01202"></a>01202 
<a name="l01203"></a>01203   } <span class="comment">// namespace algorithm</span>
<a name="l01204"></a>01204 
<a name="l01205"></a>01205 } <span class="comment">// namespace popot</span>
<a name="l01206"></a>01206 
<a name="l01207"></a>01207 <span class="preprocessor">#endif // POPOT_ALGORITHM_H</span>
</pre></div></div>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>



<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.5
</small></address>

</body>
</html>
